package com.jimmy.ioc.config;

import com.jimmy.ioc.annotation.BookDao;
import com.jimmy.ioc.annotation.BookService;
import com.jimmy.ioc.bean.Person;
import org.springframework.context.annotation.*;
import org.springframework.stereotype.Controller;

/**
 * @version 1.0
 * @ ClassName MainConfig
 * <p> TODO
 * @ author JIMMY
 * @ Date 2020/12/6 0006 下午 9:17
 */
@Configuration //告诉Spring这是一个配置类
//@ComponentScan({"com.jimmy.ioc.annotation"})   // 4.3才有功能更强大
@ComponentScans(      //spring4.0的没有 4.3才有
        value = {
                @ComponentScan(value="com.jimmy.ioc.annotation",includeFilters = {
//					@ComponentScan.Filter(type=FilterType.ANNOTATION,classes={Controller.class}),
						@ComponentScan.Filter(type=FilterType.ASSIGNABLE_TYPE,classes={BookService.class}),
						@ComponentScan.Filter(type=FilterType.ASSIGNABLE_TYPE,classes={BookDao.class}),
                        @ComponentScan.Filter(type= FilterType.CUSTOM,classes={MyTypeFilter.class})    //自定义的包括er就是controller
                },useDefaultFilters = false)
        }
)
//@ComponentScan  value:指定要扫描的包
//excludeFilters = Filter[] ：指定扫描的时候按照什么规则排除那些组件
//includeFilters = Filter[] ：指定扫描的时候只需要包含哪些组件
//FilterType.ANNOTATION：按照注解
//FilterType.ASSIGNABLE_TYPE：按照给定的类型；
//FilterType.ASPECTJ：使用ASPECTJ表达式
//FilterType.REGEX：使用正则指定
//FilterType.CUSTOM：使用自定义规则
public class MainConfig {

    //给容器中注册一个Bean;类型为返回值的类型，id默认是用方法名作为id
    @Bean(name = "person")
    public Person person1(){
        return new Person("jimmy",10);
    }
}
